package top.lcm889.juc.demo;

/**
 * @author Coder-lcm
 * @date 2021/4/10
 *      有一种线程,它是在后台运行的,它的任务是为其他的线程提供服务,这种线程被称为“后台线程
 * (Daemon Thread)”,又称为“守护线程”或“精灵线程”。JVM的垃圾回收线程就是典型的后台线程。
 *      后台线程有个特征:如果所有的前台线程都死亡,后台线程会自动死亡。
 * 调用 Thread对象 setDaemontrue方法可将指定线程设置成后台线程。下面程序将执行线程设置成
 * 后台线程,将可以看到当所有前台线程死亡时,后台线程随之死亡。当整个虚拟机中只剩下后台线程
 * 时,程序就没有继续运行的必要了,所以虚拟机也就退出了。
 *
 */
public class DaemonThread extends Thread{

    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(getName() + " : " + i);
        }
    }

    public static void main(String[] args) {
        DaemonThread daemonThread = new DaemonThread();
        // 设置为后台线程
        daemonThread.setDaemon(true);
        daemonThread.start();
        System.out.println("后台线程?： " + daemonThread.isDaemon());
        System.out.println("dead1? " + !daemonThread.isAlive());
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName() + " : " + i);
        }
        //到这里。前台线程（这里指的是main线程），已经执行结束了
        // 故后台进程也会随之死亡，不再执行
    }
}
